package file;

import ipconfig.Ipconfig;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.net.Socket;
import java.nio.ByteBuffer;
import java.nio.MappedByteBuffer;
import java.nio.channels.FileChannel;
import java.util.HashMap;
import java.util.Vector;

public class FileClientThread extends Thread {
	
	int uploandAndDownload;
	int portNumer;
	
	long position;
	long current;
	
	String filepath = null;
	String filename = null;
	
	Vector <FileTransferPanel> vectorFileTransferPanels = null;
	
	Socket socket = null;

	
	File file = null;
	FileChannel fileIn = null;
	FileChannel fileOut = null;
	FileTransfer fileTransfer = null;
	FileTransferPanel fileTransferPanel = null;
	FileInputStream fileInputStream = null;
	FileOutputStream fileOutputStream = null;
	
	ByteBuffer byteBuffer = null;
	String[] strBuffer = null;
	
	//파일 다운로드에 파일 정보를 넘기기 위한 백터입니다.
	Vector<FileInfoVO> vector_fileInfo = null;
	
	HashMap<String, FileServerThread> clients;
	
	Vector<String> v_filer = null;
	String sendUser;
	
	//업로드
	public FileClientThread(Socket socket, Vector<FileInfoVO> vector_fileInfo, String sendUser, Vector<String> v_filer, int uploandAndDownload, Vector<FileTransferPanel> vectorFileTransferPanels, FileTransfer fileTransfer) {
		this.fileTransfer = fileTransfer;
		this.socket = socket;
		this.vectorFileTransferPanels = vectorFileTransferPanels;
		this.vector_fileInfo = vector_fileInfo;
		this.uploandAndDownload = uploandAndDownload;
		this.v_filer = v_filer;
		this.sendUser = sendUser;
		
		System.out.println("파일 클라이언트 스레드");
		
		System.out.println("파일을 보내는 사람: "+sendUser);
		for(int i=0; i<this.vector_fileInfo.size(); i++){
			System.out.println("파일 정보를 담은 Vector의 file_info에 저장된 fileName: "+this.vector_fileInfo.get(i).getFileName());
			System.out.println("파일 정보를 담은 Vector의 file_info에 저장된 filePath: "+this.vector_fileInfo.get(i).getFilePath());
			System.out.println("파일 정보를 담은 Vector의 file_info에 저장된 fileSize: "+this.vector_fileInfo.get(i).getFileSize()+"Bytes");
		}
		for(int i=0; i<v_filer.size(); i++){
			System.out.println("파일을 받는 사람: "+v_filer.get(i));
		}
		
		if(uploandAndDownload == 1) {
			System.out.println("파일 클라이언트 스레드 업로드");
			fileUpload();
		}
		else if(uploandAndDownload == 2) {
			System.out.println("파일 클라이언트 스레드 다운로드");
			fileDownload();
		}
	}
	

	public void fileUpload() {
		
		new FileUpload(socket, vector_fileInfo, sendUser, v_filer, vectorFileTransferPanels, fileTransfer);
	}
	
	public void fileDownload() {
		
		System.out.println("파일 다운 로드시 포트번호: "+socket.getPort());
		new FileDownload(this, getPortNumer(), vector_fileInfo, vectorFileTransferPanels);
	}
	
	public long getCurrent() {
		return current;
	}
	
	public int getPortNumer() {
		return portNumer;
	}
	
	public void setPortNumer(int portNumer) {
		this.portNumer = portNumer;
	}
}
